package main

import (
	"net"
	"task/config"
	"task/discovery"
	"task/internal/handler"
	"task/internal/repository"
	"task/internal/service"

	"github.com/sirupsen/logrus"
	"github.com/spf13/viper"
	"google.golang.org/grpc"
)

func main() {
	config.InitConfig()
	repository.InitDB()

	// etcd 地址
	etcdAddress := []string{viper.GetString("etcd.address")}
	// 服务的注册
	etcdRegister := discovery.NewRegister(etcdAddress, logrus.New())
	grpcAddress := viper.GetString("server.grpcAddress")
	userNode := discovery.Server{
		Name: viper.GetString("server.domain"),
		Addr: grpcAddress,
	}
	server := grpc.NewServer()
	defer server.Stop()
	// 绑定服务      返回的服务实例绑定到GRPC服务器上->客户端可以通过GRPC调用此服务的方法
	service.RegisterTaskServiceServer(server, handler.NewTaskService{})
	lis, err := net.Listen("tcp", grpcAddress) // 在指定的GRPC地址上监听TCP连接
	if err != nil {
		panic(err)
	}
	if _, err := etcdRegister.Register(userNode, 10); err != nil {
		panic(err)
		// 将服务器节点注册到etcd上，并指定租约时间为10秒
	}
	if err = server.Serve(lis); err != nil {
		panic(err)
		// 启动GRPC服务器，并使其开始监听并处理传入的连接
	}
}
